#ifndef LANE_DECODE_H
#define LANE_DECODE_H


#include<iostream>
#include <pybind11/pybind11.h>
#include <pybind11/numpy.h>
#include <pybind11/stl.h>
namespace py = pybind11;

int dfs(std::uint16_t const start_x,
        std::uint16_t const start_y,
        std::uint16_t const start_pos,
        std::uint16_t const start_cls,
        int const& id,
        float const* dpuout_cls,
        float const* dpuout_reg,
        float const* class_threshold,
        int const& max_result_size,
        int filled_size_,
        int const* type_map,
        int const& net_length,
        int const& net_width,
        int const& preds_per_voxel,
        int const& cls_number,
        int const& reg_number,
        int const& lane_feature_size,
        float const* voxels_size,
        float const* pts_range,
        bool* visited,
        float* dense_pts_ptr);

int decode_lane_double_chw(float const* dpuout_cls,
                           float const* dpuout_reg,
                           float const* class_threshold,
                           int const& max_result_size,
                           int filled_size_,
                           int const* type_map,
                           int const& net_length,
                           int const& net_width,
                           int const& preds_per_voxel,
                           int const& cls_number,
                           int const& reg_number,
                           int const& lane_feature_size,
                           float const* voxels_size,
                           float const* pts_range,
                           float* dense_pts_ptr);

int decode_lane_head_double_cpu(py::array_t<float> out_cls,
                             py::array_t<float> out_reg,
                             py::array_t<int> type_map,
                             py::array_t<float> class_threshold,
                             py::array_t<float> voxels_size,
                             py::array_t<float> pts_ranges,
                             int max_result_size,
                             int filled_size_,
                             int preds_per_voxel,
                             int reg_number,
                             int lane_feature_size,
                             py::array_t<float> lane_dense_pts,
                             bool is_hwc);

#endif